Skip to main content

Java 编程小技巧

· 5 min read
古时的风筝

下面这些是 JDK 本身自带的小功能,不知道你是不是都用到过。

异或运算交换两个变量的值

如果是数值类型,可以使用异或运算^实现快速交换两个变量的值,不需要额外的临时变量。不明所以的情况下,可以用来迷惑同事。

int a = 10;
int b = 20;
a = a ^ b;
b = a ^ b;
a = a ^ b;

字符串格式化

使用String.format()将变量插入到指定格式的字符串中。

String name = "Alice";
int age = 30;
String message = String.format("Name: %s, Age: %d", name, age);

拼接字符串

使用String.join(),可以将列表以某个分隔符拼接成字符串。

List<String> list = Arrays.asList("A", "B", "C", "D");
String result = String.join(",", list);

或者使用 Lambda 的 Collectors.joining收集器。

List<String> list = Arrays.asList("A", "B", "C", "D");
String result = list.stream().collect(Collectors.joining(","));

使用StringJoiner拼接字符串:StringJoiner类提供了方便的方法来拼接字符串,可以指定分隔符和前后缀。

StringJoiner sj = new StringJoiner(", ", "[", "]");
sj.add("One").add("Two").add("Three");
String result = sj.toString(); // "[One, Two, Three]"

当然了,还可以用我们熟悉的 StringBuilderStringBuffer

字符串判空

使用String.isBlank()方法快速检查字符串是否为空或只包含空白字符。

String str = "   ";
boolean isEmptyOrBlank = str.isBlank(); // true

还有一个 String.isEmpty()方法,这个方法不能判断字符串是否为 Null,只能在确定字符串不为 Null 时使用,否则会抛出异常。

字符串按行拆分

使用String.lines()方法将字符串按行拆分为流。

String str = "line 1\nline 2\nline 3";
str.lines().forEach(System.out::println);

字符串去空白

使用String.strip()方法快速去除字符串两端的空白字符。

String str = "  Hello, World!  ";
String trimmed = str.strip(); // "Hello, World!"

字符串快速重复

使用String.repeat()方法快速重复一个字符串多次。

String repeated = "abc".repeat(3); // "abcabcabc"

列表逆序

使用Collections.reverse()方法快速逆序一个列表。

List<Integer> numbers = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));
Collections.reverse(numbers);

打乱列表顺序

使用Collections.shuffle()方法快速打乱一个列表的顺序。

List<Integer> numbers = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));
Collections.shuffle(numbers);

列表最大最小值

使用Collections.max()Collections.min()方法快速获取列表中的最大值和最小值。

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int max = Collections.max(numbers);
int min = Collections.min(numbers);

创建单一元素不可变列表

使用Collections.singletonList()方法快速创建只包含一个元素的不可变列表。

List<String> singletonList = Collections.singletonList("Single Element");

数组拷贝

使用Arrays.copyOfRange()方法复制数组的指定范围。

int[] array = {1, 2, 3, 4, 5};
int[] copy = Arrays.copyOfRange(array, 1, 4); // 复制索引1到3的元素

使用System.arraycopy()方法快速复制数组的一部分到另一个数组中。

int[] src = {1, 2, 3, 4, 5};
int[] dest = new int[5];
System.arraycopy(src, 0, dest, 0, 5);

使用Arrays.copyOf()方法快速复制数组。

int[] array = {1, 2, 3, 4, 5};
int[] copy = Arrays.copyOf(array, array.length);

数组快速填充

使用Arrays.fill()方法快速填充数组的所有元素。

int[] array = new int[5];
Arrays.fill(array, 0); // 将数组所有元素填充为0

数组二分查找

使用Arrays.binarySearch()方法在有序数组中进行快速二分查找。

int[] array = {1, 2, 3, 4, 5};
int index = Arrays.binarySearch(array, 3);

Map 避免空值

使用Map.computeIfAbsent()方法来处理获取值时,如果键不存在则计算默认值的逻辑。

Map<String, List<String>> map = new HashMap<>();
map.computeIfAbsent("key", k -> new ArrayList<>()).add("value");
风筝

作者

风筝

古时的风筝,一个平庸的程序员,主语言 Java,第二语言 Python,其实学 Python 的时间比 Java 还要早。喜欢写博客,写博客的过程能加深自己对一个知识点的理解,同时还可以分享给他人。喜欢做一些小东西,所以也会一些前端的东西,React、JavaScript、CSS 都会一些,做一些小工具还够用。